package br.com.sanambiental.san.controlador;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import br.com.sanambiental.san.entidade.PreCadrastroCliente;
import br.com.sanambiental.san.servico.PreCadastroClienteServico;
import br.com.sanambiental.san.util.EmailUtil;
import br.gov.caixa.pedesgo.arquitetura.comum.objeto.UtilObjeto;
import br.gov.caixa.pedesgo.arquitetura.comum.string.UtilString;

@ManagedBean
@SessionScoped
public class ContatoMB {

    private static final String TELA_INICIAL = "/paginas/contato/inicial.xhtml?faces-redirect=true";

    @ManagedProperty(value = "#{preCadastroClienteServico}")
    PreCadastroClienteServico preCadastroClienteServico;

    private String nome;
    private String empresa;
    private String telefone;
    private String email;
    private String mensagem;

    private boolean exibirMensagemSucesso;
    private boolean exibirMensagemCampoObrigatorio;

    /**
     * <p>
     * Método responsável por iniciar o MB de contato
     * <p>
     * 
     * @author Waltenes Junior
     */
    @PostConstruct
    public void limparMensagem() {
	this.limparTela();
    }

    /**
     * <p>
     * Método responsável por enviar email
     * <p>
     * 
     * @return String
     * @author Waltenes Junior
     */
    public String enviarEmail() {

	if (!UtilObjeto.isReferencia(this.nome)
		|| UtilString.isVazio(this.nome)
		|| !UtilObjeto.isReferencia(this.telefone)
		|| UtilString.isVazio(this.telefone)
		|| !UtilObjeto.isReferencia(this.email)
		|| UtilString.isVazio(this.email)
		|| !UtilObjeto.isReferencia(this.mensagem)
		|| UtilString.isVazio(this.mensagem)) {

	    this.setExibirMensagemCampoObrigatorio(true);
	    this.setExibirMensagemSucesso(false);
	    return TELA_INICIAL;
	}

	EmailUtil email = new EmailUtil();
	email.enviarEmail(this.montarMensagem());

	//this.inserirPreCadastroCliente();

	this.limparTela();
	this.setExibirMensagemSucesso(true);
	this.setExibirMensagemCampoObrigatorio(false);

	return TELA_INICIAL;
    }

    /**
     * <p>
     * Método responsável por inserir um pré cadastro na base de dados
     * <p>
     * 
     * @author Waltenes Junior
     */
    private void inserirPreCadastroCliente() {

	PreCadrastroCliente preCadrastroCliente = new PreCadrastroCliente();

	preCadrastroCliente.setNome(this.nome);
	preCadrastroCliente.setNomeEmpresa(this.empresa);
	preCadrastroCliente.setEmail(this.email);
	preCadrastroCliente.setTelefone(this.telefone);
	preCadrastroCliente.setMensage(this.mensagem);

	this.preCadastroClienteServico
		.inserirPreCadastroCliente(preCadrastroCliente);
    }

    /**
     * <p>
     * Método responsável por montar a mensagem em HTML
     * <p>
     * 
     * @return String em html montada
     * @author Waltenes Junior
     */
    private String montarMensagem() {
	return "<html>" + "<h2>Mensagem enviada por: </h2>" + "<h3> "
		+ this.nome + "</h3>" + "<h2>Empresa: </h2>" + "<h3> "
		+ this.empresa + "</h3>" + "<h2>Telefone: </h2>" + "<h3> "
		+ this.telefone + "</h3>" + "<h2>Email: </h2>" + "<h3> "
		+ this.email + "</h3>" + "<h2>Mensagem: <h2/>" + "<h3> "
		+ this.mensagem + "</h3>" + "</html>";
    }

    /**
     * <p>
     * Método responsável por limpar a tela de contato
     * <p>
     * 
     * @author Waltenes Junior
     */
    private void limparTela() {
	this.setNome(null);
	this.setTelefone(null);
	this.setEmail(null);
	this.setMensagem(null);
	this.setEmpresa(null);
	this.setExibirMensagemCampoObrigatorio(false);
	this.setExibirMensagemSucesso(false);
    }

    /**
     * Retorna o valor do atributo nome.
     * 
     * @return nome
     */
    public String getNome() {
	return nome;
    }

    /**
     * Define o valor do atributo nome.
     * 
     * @param nome
     *            valor a ser atribuído
     */
    public void setNome(String nome) {
	this.nome = nome;
    }

    /**
     * Retorna o valor do atributo telefone.
     * 
     * @return telefone
     */
    public String getTelefone() {
	return telefone;
    }

    /**
     * Define o valor do atributo telefone.
     * 
     * @param telefone
     *            valor a ser atribuído
     */
    public void setTelefone(String telefone) {
	this.telefone = telefone;
    }

    /**
     * Retorna o valor do atributo email.
     * 
     * @return email
     */
    public String getEmail() {
	return email;
    }

    /**
     * Define o valor do atributo email.
     * 
     * @param email
     *            valor a ser atribuído
     */
    public void setEmail(String email) {
	this.email = email;
    }

    /**
     * Retorna o valor do atributo mensagem.
     * 
     * @return mensagem
     */
    public String getMensagem() {
	return mensagem;
    }

    /**
     * Define o valor do atributo mensagem.
     * 
     * @param mensagem
     *            valor a ser atribuído
     */
    public void setMensagem(String mensagem) {
	this.mensagem = mensagem;
    }

    /**
     * Retorna o valor do atributo exibirMensagemSucesso.
     * 
     * @return exibirMensagemSucesso
     */
    public boolean isExibirMensagemSucesso() {
	return exibirMensagemSucesso;
    }

    /**
     * Define o valor do atributo exibirMensagemSucesso.
     * 
     * @param exibirMensagemSucesso
     *            valor a ser atribuído
     */
    public void setExibirMensagemSucesso(boolean exibirMensagemSucesso) {
	this.exibirMensagemSucesso = exibirMensagemSucesso;
    }

    /**
     * Retorna o valor do atributo exibirMensagemCampoObrigatorio.
     * 
     * @return exibirMensagemCampoObrigatorio
     */
    public boolean isExibirMensagemCampoObrigatorio() {
	return exibirMensagemCampoObrigatorio;
    }

    /**
     * Define o valor do atributo exibirMensagemCampoObrigatorio.
     * 
     * @param exibirMensagemCampoObrigatorio
     *            valor a ser atribuído
     */
    public void setExibirMensagemCampoObrigatorio(
	    boolean exibirMensagemCampoObrigatorio) {
	this.exibirMensagemCampoObrigatorio = exibirMensagemCampoObrigatorio;
    }

    /**
     * Retorna o valor do atributo empresa.
     * 
     * @return empresa
     */
    public String getEmpresa() {
	return empresa;
    }

    /**
     * Define o valor do atributo empresa.
     * 
     * @param empresa
     *            valor a ser atribuído
     */
    public void setEmpresa(String empresa) {
	this.empresa = empresa;
    }

    /**
     * Retorna o valor do atributo preCadastroClienteServico.
     * 
     * @return preCadastroClienteServico
     */
    public PreCadastroClienteServico getPreCadastroClienteServico() {

	return preCadastroClienteServico;
    }

    /**
     * Define o valor do atributo preCadastroClienteServico.
     * 
     * @param preCadastroClienteServico
     *            valor a ser atribuído
     */
    public void setPreCadastroClienteServico(
	    PreCadastroClienteServico preCadastroClienteServico) {

	this.preCadastroClienteServico = preCadastroClienteServico;
    }
}